'''
使用 sax 方式处理 xml 要先引入 xml.sax 中的 parse 函数，
还有 xml.sax.handler 中的 ContentHandler
startDocument() 方法

文档启动的时候调用。

endDocument() 方法

解析器到达文档结尾时调用。

startElement(name, attrs) 方法

遇到XML开始标签时调用，name 是标签的名字，attrs 是标签的属性值字典。

endElement(name) 方法

遇到XML结束标签时调用。


创建一个新的解析器对象并返回。
xml.sax.make_parser( [parser_list] )
parser_list - 可选参数，解析器列表

创建一个 SAX 解析器并解析xml文档
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
xmlfile - xml文件名
contenthandler - 必须是一个 ContentHandler 的对象
errorhandler - 如果指定该参数，errorhandler 必须是一个 SAX ErrorHandler 对象

parseString 方法创建一个 XML 解析器并解析 xml 字符串
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
xmlstring - xml字符串
contenthandler - 必须是一个 ContentHandler 的对象
errorhandler - 如果指定该参数，errorhandler 必须是一个 SAX ErrorHandler对象

'''


import xml.sax


class MoviesHandler(xml.sax.ContentHandler):


    def __init__(self):
        self.CurrentData = ""
        self.type = ""
        self.format = ""
        self.year = ""
        self.rating = ""
        self.stars = ""
        self.description = ""


    # 元素开始调用
    def startElement(self, tag, attributes):
        self.CurrentData = tag
        if tag == "movies":
            print("******Movies******")
            title = attributes["title"]
            print("title:", title)


    # 元素结束调用
    def endElement(self, tag):
        if self.CurrentData == "type":
            print("Type:", self.type)
        elif self.CurrentData == "format":
            print("Format:", self.format)
        elif self.CurrentData == "year":
            print("Year:", self.year)
        elif self.CurrentData == "rating":
            print("Rating:", self.rating)
        elif self.CurrentData == "stars":
            print("Stars:", self.stars)
        elif self.CurrentData == "description":
            print("Description:", self.description)
        self.CurrentData = ""


    # 读取字符时调用
    def characters(self, content):
          if self.CurrentData == "type":
             self.type = content
          elif self.CurrentData == "format":
             self.format = content
          elif self.CurrentData == "year":
             self.year = content
          elif self.CurrentData == "rating":
             self.rating = content
          elif self.CurrentData == "stars":
             self.stars = content
          elif self.CurrentData == "description":
             self.description = content


if(__name__ == "__main__"):
    # 创建一个xmlreader
    parser = xml.sax.make_parser()
    # 关闭命名空间
    parser.setFeature(xml.sax.handler.feature_namespaces, 0)
    
    # 重写ContextHandler
    Handler = MoviesHandler()
    parser.setContentHandler(Handler)
    parser.parse("movies.xml")
